Skip to content

feat(console): warm, tactile UI redesign - #14

Merged
hutusi merged 6 commits into
mainfrom
feat/console-redesign
Jun 21, 2026
Merged

feat(console): warm, tactile UI redesign#14
hutusi merged 6 commits into
mainfrom
feat/console-redesign

Conversation

@hutusi

@hutusi hutusi commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

What

A full visual redesign of the web console (apps/console) to make it modern, elegant, and textured — while keeping the solid bones (Tailwind v4 tokens, CVA primitives) and every component's props/behavior unchanged.

Design direction (agreed up front): warm, tactile, layered · monochrome (no brand color) · system fonts (tuned hierarchy) · full scope. No new dependencies — "texture" is pure CSS.

Highlights

  • Tokens + texture (globals.css) — re-tinted the whole neutral ramp from cold to a warm cream/charcoal stone palette; added layered warm shadow tokens; a faint SVG feTurbulence paper grain over the page + elevated surfaces (.auriga-grain); a soft top wash; tuned leading/tracking. Dark mode is now a warm charcoal.
  • Primitives — layered/grained Card, tactile Button (soft shadow + active:translate-y-px), refined Badge/Table/Input/Textarea/Select/Bar, a Sparkline with an SSR-safe area fill, and a new reusable EmptyState.
  • App shell — refined sticky header with a brand logomark, a primary New job button, a session chip, and active-route highlighting via a new client NavLinks (layout stays a server component).
  • Per-page polish — dashboard hero/stat cards + empty states; jobs list + filter/pager; job detail with a metadata strip, back link, segmented Steps/Logs tabs, and a connected timeline rail; login rebuilt on tokens (removed hardcoded neutral-*); skills/config/forms + segmented mode tabs; fixed hardcoded colors in logout-button.

Verification

  • bun run typecheck + bun run build
  • bun run test — 36/36 unit tests ✓
  • bun run e2e — 4/4 Playwright incl. axe "no serious/critical a11y violations" (the warm palette holds WCAG contrast) ✓
  • Visual walkthrough of every page in light + dark

Reviewable as five focused commits (tokens → primitives → shell → core pages → remaining pages).

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Added new EmptyState component for consistent empty-state messaging across the console
    • Improved navigation with visual indicators for active pages
    • Better structured page headers and layouts
  • Style

    • Refreshed design tokens with warmer color palette and tactile aesthetic
    • Enhanced spacing, typography hierarchy, and shadow effects
    • Improved form inputs, buttons, cards, and tables styling
    • Added grain texture overlay for elevated surfaces

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@hutusi, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 17 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more credits in the billing tab to continue.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 17e8dc65-d6a9-44a2-b613-83e1de8d38be

📥 Commits

Reviewing files that changed from the base of the PR and between 0389950 and 899c62d.

📒 Files selected for processing (2)
  • apps/console/components/job-form.tsx
  • apps/console/components/ui/select.tsx
📝 Walkthrough

Walkthrough

A comprehensive visual redesign of the Auriga console: new design tokens (warmer HSL palette, paper-grain CSS variables, card shadow tokens) in globals.css; restyled UI primitives (Card, Button, Table, Input, Badge, Bar); a new reusable EmptyState component; a NavLinks client component replacing inline nav; and updated layout/page markup with structured headers, back-navigation links, and EmptyState placements across all major routes.

Changes

Console UI visual redesign

Layer / File(s) Summary
Design tokens and global styles
apps/console/app/globals.css
Replaces :root color/radius variables with a warmer token set, adds paper-grain CSS variables and dark-mode variants, extends @theme inline with --radius-xl and --shadow-card tokens, and rewrites @layer base to add a radial gradient wash, body::before grain overlay, and opt-in .auriga-grain helper class.
UI primitive components restyled + EmptyState added
apps/console/components/ui/empty-state.tsx, apps/console/components/ui/card.tsx, apps/console/components/ui/button.tsx, apps/console/components/ui/input.tsx, apps/console/components/ui/select.tsx, apps/console/components/ui/textarea.tsx, apps/console/components/ui/table.tsx, apps/console/components/ui/badge.tsx, apps/console/components/ui/bar.tsx
Introduces EmptyState (icon, title, description, children). Card adds auriga-grain/rounded-xl/shadow-card; Button adds active:translate-y-px and per-variant shadow-sm; Input/Select/Textarea move to h-9/rounded-lg/ring-ring/40; Table wraps in a horizontally scrollable div with updated header/row/cell styling; Badge dark-mode tone values updated; Bar fill switches to gradient.
NavLinks component and root layout refactor
apps/console/components/nav-links.tsx, apps/console/app/layout.tsx
nav-links.tsx is rewritten as a client component with a NAV route list, isActive() helper, and aria-current link rendering. RootLayout replaces the inline NAV-driven <nav> with <NavLinks>, wraps the new-job link in Button asChild, and restyles the session display as a pill indicator with a colored status dot.
Page-level layout and empty-state updates
apps/console/app/page.tsx, apps/console/app/config/page.tsx, apps/console/app/skills/page.tsx, apps/console/app/jobs/page.tsx, apps/console/app/jobs/[id]/page.tsx, apps/console/app/jobs/new/page.tsx, apps/console/app/login/page.tsx
All major pages gain structured h1/description headers, back-navigation links, and EmptyState placements (using CloudOff, Inbox, or Puzzle icons) for unavailable/empty data states. Dashboard Stat now accepts an icon prop and conditionally renders the recent-audit table. Job detail adds a Meta helper component and hasActions gating. New Job passes createdBy to JobForm. Login switches to a centered card layout with an avatar block.
Feature component and form styling
apps/console/components/config-form.tsx, apps/console/components/job-form.tsx, apps/console/components/login-form.tsx, apps/console/components/run-timeline-panel.tsx, apps/console/components/run-timeline.tsx, apps/console/components/sparkline.tsx, apps/console/components/live-run.tsx, apps/console/components/logout-button.tsx, apps/console/components/workspace-viewer.tsx
config-form, job-form, and run-timeline-panel tablist containers switch to inline-flex pill styling with updated active/inactive ModeTab tokens. login-form replaces raw <input>/<select> with Field/Input/Select/Button UI components. sparkline adds a filled <polygon> area under the polyline. run-timeline inserts a decorative left rail <div>. live-run updates LiveStatus to an emerald indicator.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • ainaive/auriga#7: Introduced the console app routes and base components that this PR's restyling directly builds upon.
  • ainaive/auriga#10: Overlaps directly on app/jobs/[id]/page.tsx and app/jobs/new/page.tsx, the same files this PR modifies for layout/header changes.
  • ainaive/auriga#13: Introduced jobActions(job)-driven action flags consumed by the hasActions gating this PR adds to app/jobs/[id]/page.tsx.

Poem

🐇 Hop, hop, the pixels align,
New grains of paper make the cards shine,
A NavLinks bar guides the way through,
EmptyState blooms where old paragraphs grew,
Warm hues and shadows, a tactile delight—
The console's dressed up for its big opening night! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 19.51% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(console): warm, tactile UI redesign' directly and clearly summarizes the main change—a comprehensive visual redesign of the console with warm, tactile aesthetics—which is the primary focus across all modified files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/console-redesign

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
apps/console/components/job-form.tsx (1)

279-279: ⚡ Quick win

Align CriterionRow background with PolicyRow for consistency.

CriterionRow (line 279) uses bg-background, while the analogous PolicyRow in config-form.tsx (line 212) uses bg-muted/30. Both are similar container rows with borders. Consider using the same background token for visual consistency across the console.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/console/components/job-form.tsx` at line 279, The CriterionRow component
in job-form.tsx uses the bg-background background class while the analogous
PolicyRow in config-form.tsx uses bg-muted/30. To maintain visual consistency
across the console, update the className on the div element containing
rounded-lg border bg-background p-2.5 to use bg-muted/30 instead of
bg-background, matching the styling pattern of PolicyRow.
apps/console/app/globals.css (1)

117-117: ⚡ Quick win

Stylelint false positive on text-rendering value.

Stylelint is flagging optimizeLegibility and suggesting optimizelegibility, but per the CSS specification (MDN, W3C), text-rendering values are case-sensitive and optimizeLegibility (camelCase) is the correct value. The lowercase variant is not valid CSS.

Suppress this line or add optimizeLegibility to the value-keyword-case rule's ignoreKeywords list.

🔧 Proposed fix
     line-height: 1.55;
     letter-spacing: -0.005em;
     -webkit-font-smoothing: antialiased;
+    /* stylelint-disable-next-line value-keyword-case */
     text-rendering: optimizeLegibility;
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/console/app/globals.css` at line 117, The `text-rendering:
optimizeLegibility;` property in globals.css is triggering an incorrect
Stylelint warning suggesting the lowercase variant. Since `optimizeLegibility`
(camelCase) is the correct CSS specification value, suppress this specific line
using a Stylelint disable comment (e.g., /* stylelint-disable-next-line
value-keyword-case */) above the text-rendering property, or alternatively add
`optimizeLegibility` to the `ignoreKeywords` array in your Stylelint
configuration's `value-keyword-case` rule to prevent this false positive from
occurring again.

Source: Linters/SAST tools

apps/console/components/ui/select.tsx (1)

8-8: 💤 Low value

Consider aligning horizontal padding with Input for visual consistency.

The Select component uses px-2.5 while the Input component (line 8 in input.tsx) uses px-3. This creates a subtle visual misalignment when these form controls appear together in forms.

If the difference is intentional to accommodate native select styling, consider documenting it. Otherwise, standardizing on px-3 would improve visual consistency.

Align padding with Input
-        "flex h-9 w-full rounded-lg border border-input bg-background px-2.5 py-1 text-sm shadow-sm transition-colors focus-visible:border-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50",
+        "flex h-9 w-full rounded-lg border border-input bg-background px-3 py-1 text-sm shadow-sm transition-colors focus-visible:border-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/console/components/ui/select.tsx` at line 8, The Select component uses
`px-2.5` for horizontal padding while the Input component uses `px-3`, creating
visual inconsistency when these form controls are used together. In the Select
component's className string, change the horizontal padding value from `px-2.5`
to `px-3` to align with the Input component's padding and maintain visual
consistency across form controls.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@apps/console/app/globals.css`:
- Line 117: The `text-rendering: optimizeLegibility;` property in globals.css is
triggering an incorrect Stylelint warning suggesting the lowercase variant.
Since `optimizeLegibility` (camelCase) is the correct CSS specification value,
suppress this specific line using a Stylelint disable comment (e.g., /*
stylelint-disable-next-line value-keyword-case */) above the text-rendering
property, or alternatively add `optimizeLegibility` to the `ignoreKeywords`
array in your Stylelint configuration's `value-keyword-case` rule to prevent
this false positive from occurring again.

In `@apps/console/components/job-form.tsx`:
- Line 279: The CriterionRow component in job-form.tsx uses the bg-background
background class while the analogous PolicyRow in config-form.tsx uses
bg-muted/30. To maintain visual consistency across the console, update the
className on the div element containing rounded-lg border bg-background p-2.5 to
use bg-muted/30 instead of bg-background, matching the styling pattern of
PolicyRow.

In `@apps/console/components/ui/select.tsx`:
- Line 8: The Select component uses `px-2.5` for horizontal padding while the
Input component uses `px-3`, creating visual inconsistency when these form
controls are used together. In the Select component's className string, change
the horizontal padding value from `px-2.5` to `px-3` to align with the Input
component's padding and maintain visual consistency across form controls.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8178914a-c4f8-4dd4-ae86-86ee419fcce0

📥 Commits

Reviewing files that changed from the base of the PR and between 13d2797 and 0389950.

📒 Files selected for processing (28)
  • apps/console/app/config/page.tsx
  • apps/console/app/globals.css
  • apps/console/app/jobs/[id]/page.tsx
  • apps/console/app/jobs/new/page.tsx
  • apps/console/app/jobs/page.tsx
  • apps/console/app/layout.tsx
  • apps/console/app/login/page.tsx
  • apps/console/app/page.tsx
  • apps/console/app/skills/page.tsx
  • apps/console/components/config-form.tsx
  • apps/console/components/job-form.tsx
  • apps/console/components/live-run.tsx
  • apps/console/components/login-form.tsx
  • apps/console/components/logout-button.tsx
  • apps/console/components/nav-links.tsx
  • apps/console/components/run-timeline-panel.tsx
  • apps/console/components/run-timeline.tsx
  • apps/console/components/sparkline.tsx
  • apps/console/components/ui/badge.tsx
  • apps/console/components/ui/bar.tsx
  • apps/console/components/ui/button.tsx
  • apps/console/components/ui/card.tsx
  • apps/console/components/ui/empty-state.tsx
  • apps/console/components/ui/input.tsx
  • apps/console/components/ui/select.tsx
  • apps/console/components/ui/table.tsx
  • apps/console/components/ui/textarea.tsx
  • apps/console/components/workspace-viewer.tsx

@hutusi
hutusi merged commit 9dceeeb into main Jun 21, 2026
5 checks passed
@hutusi
hutusi deleted the feat/console-redesign branch June 21, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant